home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 050 / madtrb1.arc / ERROR.INC < prev    next >
Text File  |  1986-02-27  |  21KB  |  437 lines

  1. { ERROR.INC }
  2.  
  3. { *************************************************************************** }
  4. { *                                                                         * }
  5. { *                TURBO SCREEN INPUT PRE-PROCESSOR TOOLKIT                 * }
  6. { *                                                                         * }
  7. { *                 ERROR CHECKING SUBPROGRAM INCLUDE FILE                  * }
  8. { *                                                                         * }
  9. { *                             Version  1.07                               * }
  10. { *                                                                         * }
  11. { *                                                                         * }
  12. { *      This subprogram contains two modules which are used in checking    * }
  13. { *      specific user data input.                                          * }
  14. { *                                                                         * }
  15. { *************************************************************************** }
  16.  
  17.  
  18.  
  19. Procedure G_I_ErrorCheckingModule;{(Var OldPrompt,
  20.                                         NewPrompt:Integer;
  21.                                     Var DataEntry:Workstring);}
  22.  
  23. { *************************************************************************** }
  24. { *                                                                         * }
  25. { *                GENERAL INPUT PAGE ERROR CHECKING MODULE                 * }
  26. { *                                                                         * }
  27. { *    This module controls the checking of user data input for the         * }
  28. { *    general input pages.                                                 * }
  29. { *                                                                         * }
  30. { *    Note that the procedures within this module have been written        * }
  31. { *    specifically for the example application of the input pre-processor. * }
  32. { *    You may want to write similar procedures for your application.       * }
  33. { *                                                                         * }
  34. { *************************************************************************** }
  35.  
  36.  
  37.  
  38.   Procedure DisplayErrorMessage(    ScreenRow   :Integer;
  39.                                     ErrorMessage:WorkString);
  40.  
  41.   { This procedure displays the passed error message describing the illegal
  42.     general input page data entry that the user has inputed at the passed
  43.     screen row location. }
  44.  
  45.   Begin   { DisplayErrorMessage }
  46.     StoreTextScreen(1);                { take a snapshot of the screen }
  47.     TextColor(ForegroundColor);
  48.     TextBackground(BackgroundColor);
  49.     SoundAttention;
  50.     ZoomWindow1(4,ScreenRow-1,77,ScreenRow+1); { display error message }
  51.     TextColor(HighlightColor);
  52.     WriteCenterText(ScreenRow,ErrorMessage);
  53.     TextColor(ForegroundColor);
  54.     WriteCenterText(ScreenRow+1,'Strike any key to continue');
  55.     WaitUntilKeypressed;
  56.     RecallTextScreen(1);               { restore old screen from snapshot }
  57.   End;    { DisplayErrorMessage }
  58.  
  59.  
  60.  
  61.   Procedure RequestBeamSpan;
  62.  
  63.   { This procedure is specific to the example application of the input
  64.     pre-processor.  You may want to write a similar procedure to do your input
  65.     error checking.
  66.  
  67.     This procedure requests that the user enter the beam length before it
  68.     will allow the user to page downward. }
  69.  
  70.   Begin   { RequestBeamSpan }
  71.     DisplayErrorMessage(19,'Please enter beam span before paging downward');
  72.     OldPrompt:=NewPrompt;
  73.     NewPrompt:=13;                     { place user's current prompt at prompt entry that requires filling out. }
  74.     Move_G_I_InputPromptBlockModule(OldPrompt,NewPrompt);
  75.   End;    { RequestBeamSpan }
  76.  
  77.  
  78.  
  79.   Procedure CheckForDirectory(Var DirectoryPathEntry:WorkString);
  80.  
  81.   { This procedure is specific to the example application of the input
  82.     pre-processor.  You may want to write a similar procedure to do your input
  83.     error checking.
  84.  
  85.     This procedure checks for the existance of the passed user entered disk
  86.     directory path. }
  87.  
  88.   Var
  89.     LoggedDirectory:WorkString;        { string variable used to temporarily store the currently logged directory }
  90.     ExistantDirectory:Boolean;         { boolean used in the test for the existance of the user requested disk directory }
  91.  
  92.   Begin   { CheckForDirectory }
  93.     GetDir(0,LoggedDirectory);         { get the currently logged directory }
  94.     {$I- }                             { I/O error checking is set to passive state }
  95.     ChDir(DirectoryPathEntry);         { attempt to change directory to user's specified directory }
  96.     {$I+ }                             { I/O error checking is set to active state }
  97.     ExistantDirectory:=(IOresult=0);   { If ExistantDirectory=True, then directory exists }
  98.     ChDir(LoggedDirectory);            { change back to original directory }
  99.     If Not (ExistantDirectory) Then
  100.       Begin                            { user has specified a non-existent directory }
  101.         DisplayErrorMessage(6,'The above specified directory path is non-existant');
  102.         OldPrompt:=NewPrompt;
  103.         NewPrompt:=NewPrompt-1;        { place user's current prompt at prompt entry that requires filling out. }
  104.         DirectoryPathEntry:=G_I_Data[NewPrompt,G_I_Page]^; { place previous entry into passed entry }
  105.       End; { If Not(ExistantDirectory) }
  106.   End;    { CheckForDirectory }
  107.  
  108.  
  109.  
  110.   Procedure CheckBeamLength(Var BeamLengthEntry:WorkString);
  111.  
  112.   { This procedure is specific to the example application of the input
  113.     pre-processor.  You may want to write a similar procedure to do your input
  114.     error checking.
  115.  
  116.     This procedure checks to see if there are any load locations that exceed
  117.     the newly entered beam length entry.  This procedure prevents the
  118.     corruption of previously entered input data. }
  119.  
  120.   Var
  121.     Page:Integer;                      { an index counter to a data page }
  122.     Row:Integer;                       { an index counter to a data row }
  123.     ErrorCode:Integer;                 { variable used in the return of an error code during a string conversion to a real }
  124.     LoadPosition:Real;                 { a temporary variable used in checking input data for corruption }
  125.     BeamLengthExceeded:Boolean;        { a boolean used in testing if an attempt has been made to corrupt data }
  126.  
  127.   Begin   { CheckBeamLength }
  128.     BeamLengthExceeded:=False;         { initialize boolean flag }
  129.     Val(BeamLengthEntry,BeamLength,ErrorCode);
  130.     For Page:=1 To MAX_NUM_OF_S_I_PAGES Do
  131.       For Row:=1 To S_I_ENTRY_LIMIT Do
  132.         Begin                          { check all previous inputed data entries }
  133.           If S_I_Data[2,Row,Page]^<>'' Then
  134.             Begin
  135.               Val(S_I_Data[2,Row,Page]^,LoadPosition,ErrorCode);
  136.               If LoadPosition>BeamLength Then
  137.                 BeamLengthExceeded:=True;
  138.             End; { If S_I_Data }
  139.           If S_I_Data[4,Row,Page]^<>'' Then
  140.             Begin
  141.               Val(S_I_Data[4,Row,Page]^,LoadPosition,ErrorCode);
  142.               If LoadPosition>BeamLength Then
  143.                 BeamLengthExceeded:=True;
  144.             End; { If S_I_Data }
  145.         End; { For Row }
  146.     If BeamLengthExceeded Then
  147.       Begin                            { user has attempted to corrupt previously entered input data }
  148.         DisplayErrorMessage(19,'There exists a load position that exceeds the above beam length');
  149.         OldPrompt:=NewPrompt;
  150.         NewPrompt:=NewPrompt-1;        { place user's current prompt at prompt entry that requires filling out. }
  151.         BeamLengthEntry:=G_I_Data[NewPrompt,G_I_Page]^; { place previous entry into passed entry }
  152.       End; { If BeamLengthExceeded }
  153.   End;    { CheckBeamLength }
  154.  
  155.  
  156.  
  157.   Procedure CheckShearStudDiameter(Var ShearStudDiameterEntry:WorkString);
  158.  
  159.   { This procedure is specific to the example application of the input
  160.     pre-processor.  You may want to write a similar procedure to do your input
  161.     error checking.
  162.  
  163.     This procedure determines if the passed user entered shear stud diameter
  164.     is a legal entry.  Note this procedure only allows the user to enter the
  165.     following choices for shear stud diameters:
  166.  
  167.                               0.5"
  168.                               0.75"
  169.                               0.875"            }
  170.  
  171.   Var
  172.     ErrorCode:Integer;                 { variable used in the return of an error code during a string conversion to a real }
  173.     StudDiameter:Real;                 { variable used in converting user entered string entry into a real }
  174.  
  175.   Begin   { CheckShearStudDiameter }
  176.     Val(ShearStudDiameterEntry,StudDiameter,ErrorCode);
  177.     If Not((StudDiameter=0.5) Or (StudDiameter=0.75) Or (StudDiameter=0.875)) Then { user only allowed to enter three types }
  178.       Begin                            { illegal entry }
  179.         DisplayErrorMessage(23,' Allowable shear stud diameters are: 0.500", 0.750", 0.875"');
  180.         OldPrompt:=NewPrompt;
  181.         NewPrompt:=NewPrompt-1;        { place user's current prompt at prompt entry that requires filling out. }
  182.         ShearStudDiameterEntry:=G_I_Data[NewPrompt,G_I_Page]^; { place previous entry into passed entry }
  183.       End; { If Not((StudDiameter }
  184.   End;    { CheckShearStudDiameter }
  185.  
  186.  
  187.  
  188.   Procedure CheckEntry(Var InputEntry:Workstring);
  189.  
  190.   { This procedure controls the checking of specific general input page data
  191.     entries to determine if the just entered data is legal and takes
  192.     appropriate action as defined in the specific procedures.  Note that the
  193.     case statement below only supports 4 general input pages, but can easily
  194.     be added to inorder to support additional pages. }
  195.  
  196.   Begin   { CheckEntry }
  197.     Case G_I_Page Of
  198.       1 : Begin
  199.             If InputEntry=Chr(81) Then { page down entered }
  200.               RequestBeamSpan { user must enter beam span before pre-processor will allow him to page down }
  201.             Else
  202.               If InputEntry<>'' Then
  203.                 Case NewPrompt Of
  204.                    2 : CheckForDirectory(InputEntry);
  205.                   13 : CheckBeamLength(InputEntry);
  206.                   21 : CheckShearStudDiameter(InputEntry);
  207.                 End; { Case NewPrompt }
  208.           End; { page 1 }
  209.       2 : Begin
  210.           End; { page 2 }
  211.       3 : Begin
  212.           End; { page 3 }
  213.       4 : Begin
  214.           End; { page 4 }
  215.     End; { Case G_I_Page }
  216.   End;    { CheckEntry }
  217.  
  218.  
  219.  
  220. Begin   { G_I_ErrorCheckingModule }
  221.   CheckEntry(DataEntry);
  222. End;    { G_I_ErrorCheckingModule }
  223.  
  224.  
  225.  
  226. Procedure S_I_ErrorCheckingModule;{(Var OldCol                 :Integer;
  227.                                         OldRow                 :Integer;
  228.                                     Var NewCol                 :Integer;
  229.                                         NewRow,
  230.                                         CurrentTopMostDataRow  :Integer;
  231.                                     Var CurrentLeftMostDataCol,
  232.                                         CurrentRightMostDataCol:Integer;
  233.                                     Var DataEntry              :Workstring);}
  234.  
  235. { *************************************************************************** }
  236. { *                                                                         * }
  237. { *                SCROLLING INPUT PAGE ERROR CHECKING MODULE               * }
  238. { *                                                                         * }
  239. { *    This module controls the checking of user data input for the         * }
  240. { *    scrolling input pages.                                               * }
  241. { *                                                                         * }
  242. { *    Note that the procedures within this module have been written        * }
  243. { *    specifically for the example application of the input pre-processor. * }
  244. { *    You may want to write similar procedures for your application.       * }
  245. { *                                                                         * }
  246. { *************************************************************************** }
  247.  
  248.  
  249.  
  250.   Procedure DisplayErrorMessage(    IllegalEntryCode:Integer);
  251.  
  252.   { This procedure is specific to the example application of the input
  253.     pre-processor.  You may want to write a similar procedure to do your input
  254.     error checking.
  255.  
  256.     This procedure displays the error message describing the illegal scrolling
  257.     input page data entry that the user has inputed, according to the passed
  258.     IllegalEntryCode. }
  259.  
  260.   Begin   { DisplayErrorMessage }
  261.     StoreTextScreen(1);
  262.     SoundAttention;
  263.     TextColor(ForegroundColor);
  264.     TextBackground(ErrorWindowColor);
  265.     Case IllegalEntryCode Of
  266.       1 : Begin                        { X1 cannot be larger than or equal to Beam Span }
  267.             ZoomWindow1(4,10,55,12);
  268.             TextColor(HighlightColor);
  269.             GotoXY(7,11);
  270.             Write('X1 cannot be larger than or equal to Beam Span');
  271.             TextColor(ForegroundColor);
  272.             GotoXY(17,12);
  273.             Write('Strike any key to continue');
  274.           End;                         { X1 cannot be larger than or equal to Beam Span }
  275.       2 : Begin                        { X1 cannot be larger than or equal to X2 }
  276.             ZoomWindow1(4,10,48,12);
  277.             TextColor(HighlightColor);
  278.             GotoXY(7,11);
  279.             Write('X1 cannot be larger than or equal to X2');
  280.             TextColor(ForegroundColor);
  281.             GotoXY(13,12);
  282.             Write('Strike any key to continue');
  283.           End;                         { X1 cannot be larger than or equal to X2 }
  284.       3 : Begin                        { X2 cannot be larger than Beam Span }
  285.             ZoomWindow1(4,10,43,12);
  286.             TextColor(HighlightColor);
  287.             GotoXY(7,11);
  288.             Write('X2 cannot be larger than Beam Span');
  289.             TextColor(ForegroundColor);
  290.             GotoXY(11,12);
  291.             Write('Strike any key to continue');
  292.           End;                         { X2 cannot be larger than Beam Span }
  293.       4 : Begin                        { X2 cannot be smaller than or equal to X1 }
  294.             ZoomWindow1(4,10,49,12);
  295.             TextColor(HighlightColor);
  296.             GotoXY(7,11);
  297.             Write('X2 cannot be smaller than or equal to X1');
  298.             TextColor(ForegroundColor);
  299.             GotoXY(14,12);
  300.             Write('Strike any key to continue');
  301.           End;                         { X2 cannot be smaller than or equal to X1 }
  302.       5 : Begin                        { X2 cannot be equal to 0 }
  303.             ZoomWindow1(4,10,35,12);
  304.             TextColor(HighlightColor);
  305.             GotoXY(9,11);
  306.             Write('X2 cannot be equal to 0');
  307.             TextColor(ForegroundColor);
  308.             GotoXY(7,12);
  309.             Write('Strike any key to continue');
  310.           End;                         { X2 cannot be equal to 0 }
  311.       6 : Begin                        { X cannot be larger than Beam Span }
  312.             ZoomWindow1(4,10,42,12);
  313.             TextColor(HighlightColor);
  314.             GotoXY(7,11);
  315.             Write('X cannot be larger than Beam Span');
  316.             TextColor(ForegroundColor);
  317.             GotoXY(10,12);
  318.             Write('Strike any key to continue');
  319.           End;                         { X cannot be larger than Beam Span }
  320.     End; { Case IllegalEntryCode }
  321.     WaitUntilKeypressed;
  322.  
  323.     { routine erases error message window }
  324.     RecallTextScreen(1);
  325.  
  326.     Window(LEFT_EDGE_OF_OUTER_SCROLL_WINDOW,
  327.            TOP_EDGE_OF_OUTER_SCROLL_WINDOW,
  328.            RightEdgeOfOuterScrollWindow,
  329.            BOTTOM_EDGE_OF_OUTER_SCROLL_WINDOW);
  330.   End;    { DisplayErrorMessage }
  331.  
  332.  
  333.  
  334.   Procedure CheckEntry(Var InputEntry:Workstring);
  335.  
  336.   { This procedure is specific to the example application of the input
  337.     pre-processor.  You may want to write a similar procedure to do your input
  338.     error checking.
  339.  
  340.     This procedure checks the scrolling input page data entry to determine if
  341.     the data entry is legal and takes the appropriate action defined, if
  342.     necessary.
  343.  
  344.     Note that the case statement below only supports 4 scrolling input pages,
  345.     but can easily be added to inorder to support additional pages. }
  346.  
  347.   Var
  348.     ErrorCode:Integer;                 { variable used in the return of an error code during a string conversion to a real }
  349.     IllegalEntry:Integer;              { variable used to register why user's entry is illegal }
  350.     X_Entry:Real;                      { variable used in converting user entered string entry into a real }
  351.     X1_Entry:Real;                     { variable used in converting user entered string entry into a real }
  352.     X2_Entry:Real;                     { variable used in converting user entered string entry into a real }
  353.  
  354.   Begin   { CheckEntry }
  355.     IllegalEntry:=0;                   { initialize illegal entry code }
  356.     { convert loading dimensions to type real }
  357.     Val(S_I_Data[2,NewRow,S_I_Page]^,X_Entry,ErrorCode);
  358.     X1_Entry:=X_Entry;                 { defined by example application of input pre-processor }
  359.     Val(S_I_Data[4,NewRow,S_I_Page]^,X2_Entry,ErrorCode);
  360.     Case S_I_Page Of
  361.       1 : Begin
  362.             Case NewCol Of
  363.               2 : Begin
  364.                     Val(InputEntry,X1_Entry,ErrorCode);
  365.                     If X1_Entry>=BeamLength Then
  366.                       IllegalEntry:=1; { X1 cannot be larger than or equal to Beam Span }
  367.                     If (X1_Entry>=X2_Entry) And (S_I_Data[4,NewRow,S_I_Page]^<>'') Then
  368.                       IllegalEntry:=2; { X1 cannot be larger than or equal to X2 }
  369.                   End;
  370.               4 : Begin
  371.                     Val(InputEntry,X2_Entry,ErrorCode);
  372.                     If X2_Entry>BeamLength Then
  373.                       IllegalEntry:=3; { X2 cannot be larger than Beam Span }
  374.                     If (X2_Entry<=X1_Entry) And (S_I_Data[2,NewRow,S_I_Page]^<>'') Then
  375.                       IllegalEntry:=4; { X2 cannot be smaller than or equal to X1 }
  376.                     If (X2_Entry=0.0) And (InputEntry<>'') Then
  377.                       IllegalEntry:=5; { X2 cannot be equal to 0 }
  378.                   End;
  379.             End; { Case NewCol }
  380.           End; { page 1 }
  381.       2 : Begin
  382.             Case NewCol Of
  383.               2 : Begin
  384.                     Val(InputEntry,X_Entry,ErrorCode);
  385.                     If X_Entry>BeamLength Then
  386.                       IllegalEntry:=6; { X cannot be larger than Beam Span }
  387.                   End;
  388.             End; { Case NewCol }
  389.           End; { page 2 }
  390.       3 : Begin
  391.             Case NewCol Of
  392.               2 : Begin
  393.                     Val(InputEntry,X1_Entry,ErrorCode);
  394.                     If X1_Entry>=BeamLength Then
  395.                       IllegalEntry:=1; { X1 cannot be larger than or equal to Beam Span }
  396.                     If (X1_Entry>=X2_Entry) And (S_I_Data[4,NewRow,S_I_Page]^<>'') Then
  397.                       IllegalEntry:=2; { X1 cannot be larger than or equal to X2 }
  398.                   End;
  399.               4 : Begin
  400.                     Val(InputEntry,X2_Entry,ErrorCode);
  401.                     If X2_Entry>BeamLength Then
  402.                       IllegalEntry:=3; { X2 cannot be larger than Beam Span }
  403.                     If (X2_Entry<=X1_Entry) And (S_I_Data[2,NewRow,S_I_Page]^<>'') Then
  404.                       IllegalEntry:=4; { X2 cannot be smaller than or equal to X1 }
  405.                     If (X2_Entry=0.0) And (InputEntry<>'') Then
  406.                       IllegalEntry:=5; { X2 cannot be equal to 0 }
  407.                   End;
  408.             End; { Case NewCol }
  409.           End; { page 3 }
  410.       4 : Begin
  411.             Case NewCol Of
  412.               2 : Begin
  413.                     Val(InputEntry,X_Entry,ErrorCode);
  414.                     If X_Entry>BeamLength Then
  415.                       IllegalEntry:=6; { X cannot be larger than Beam Span }
  416.                   End;
  417.             End; { Case NewCol }
  418.           End; { page 4 }
  419.     End; { Case S_I_Page }
  420.     If IllegalEntry<>0 Then
  421.       Begin
  422.         DisplayErrorMessage(IllegalEntry);
  423.         NewCol:=NewCol-1;
  424.         If NewCol<CurrentLeftMostDataCol Then
  425.           ShiftScrollWindowDataSidewaysModule(NewCol,
  426.                                               CurrentTopMostDataRow,
  427.                                               CurrentLeftMostDataCol,
  428.                                               CurrentRightMostDataCol);
  429.         InputEntry:=S_I_Data[NewCol,NewRow,S_I_Page]^;
  430.       End; { If IllegalEntry }
  431.   End;    { CheckEntry }
  432.  
  433.  
  434.  
  435. Begin   { S_I_ErrorCheckingModule }
  436.   CheckEntry(DataEntry);
  437. End;    { S_I_ErrorCheckingModule }